# nc传输文件 命令传输文件

# nc命令和网络通信有关，nc之间可以通信，也可以和其它网络工具通信
# -l 监听模式，即服务端。
# -p 指定监听的端口。
# -n 后面参数解释为IP，不是域名。
# -u UDP模式，默认为TCP协议。

# 安装
apt install netcat
choco install netcat


# 两边可以打字聊天:

# 服务端
nc -l -p 10000

# 客户端
nc -n 127.0.0.1 10000

# 服务端
# 开启监听后，等待客户端连接，当第一个客户端连接成功后，nc将不再监听，也即监听端口被释放了，可以换个窗口使用nc -l -p 10000验证。
# 建立连接前，用户输入的数据会被缓存（输入回车才会真正缓存）。
# 建立连接后，会直接将缓存数据发送给客户端。
# 建立连接后，用户输入的数据（使用回车键结束），会被发送给客户端，包含换行符。
# 建立连接后，客户端的数据会直接显示到屏幕。
# 客户端关闭后，nc程序将退出。

# 客户端
# 若连接失败，直接退出，返回1。
# 连接成功，用户输入的数据（使用回车键结束），会被发送给服务端，包含换行符。
# 建立连接后，服务端的数据会直接显示到屏幕。
# 服务端关闭后，nc程序将退出。


# 文件传输：服务端 → 客户端

# 服务端
cat aa.txt | nc -l -p 10000
# 或
nc -l -p 10000 < aa.txt

# 客户端
nc -n 192.168.1.100 10000 > aa.txt

# 文件传输：服务端 ← 客户端

# 服务端
nc -l -p 10000 > aa.txt
# 客户端
cat aa.txt | nc -n 192.168.1.100 10000
# 或
nc -n 192.168.1.100 10000 < aa.txt


# 数据转发
# nc命令可以使用管道连接起来，实现数据转发的效果。转发端可以是两个服务端，也可以是两个客户端，或者是混合，但用户需保证，必须先创建服务端才能连接对应的客户端。

# 中转端（先执行）
nc -l -p 10000 | nc -l -p 10001

# 客户端1（发送数据或文件）
nc -n 192.168.1.100 10000
# 或 
cat 1.txt | nc -n 192.168.1.10000

# 客户端2（接收数据或文件）
nc -n 192.168.1.100 10001
# 或 
nc -n 192.168.1.10001 > 2.txt


# 双向数据转发
# 下面的环境中，在客户端1输入的数据会在客户端2上显示，在客户端2上输入的数据会在客户端1上显示。数据都是先抵达中转端，然后通过管道重定向数据。

# 客户端1（先执行）
nc -l -p 10000

# 中转端
mkfifo a.fifo
cat a.fifo | nc -n 192.168.1.100 10000 | nc -l -p 10001 > a.fifo

# 客户端2
nc -n 192.168.1.100 10001

# https://blog.csdn.net/qq_37858281/article/details/105348107
